SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spMigrarServiciosHistoricos]

@fechaDesde DATETIME,
@fechaHasta DATETIME

AS

DECLARE @error INT

BEGIN TRANSACTION

-- PASA LOS SERVICIOS HISTORICOS 
-- RENDIMIENTO: 22449 Registros en 44 SEGUNDOS
INSERT INTO tb_ServiciosHistoricos (IdAgente, NumeroOrden, CargoGenerico, AsignaturaGenerica, Horas,
UbicacionOriginal, DescrUbic, Localidad, SituacionRevista, FechaAlta, Baja, FechaBaja, FechaTermino,
NormaBaja, CausaBaja, CausaAlta, TipoServicio, Sistema, RegimenLaboral, Financiamiento, Presupuesto, 
Finalidad, TipoDeFuncion, RegimenSalarial, RegimenDesignacion, NroAfiliadoJubilacion, CajaJubilacion,
NormaAlta, FechaDeCarga9, CategoriaTitulo, ServicioAgente, Nivel, Ciclo, Modalidad, Zona)
SELECT SA.Agente, SA.NroDeOrden9, T.CargoDef, T.AsigDef, Sa.Horas,
SA.UbicacionOrig, O.Nombre, O.Localidad, SA.SituacionRevista, 
CASE 
WHEN SA.FechaAlta < @FechaDesde THEN @FechaDesde
ELSE Sa.FechaAlta
END, SA.Baja,
CASE
WHEN DATEADD(day, 1, SA.FechaBaja) > @FechaHasta THEN @FechaHasta
WHEN DATEADD(day, 1, SA.FechaBaja) IS NULL THEN @FechaHasta
ELSE DATEADD(day, 1, SA.FechaBaja)
END, SA.FechaTermino, SA.NormaBaja, SA.CausaBaja, SA.CausaAlta, Sa.TipoDeServicio,
SA.Sistema, SA.RegimenLaboral, SA.Financiamiento, SA.Presupuesto, SA.Finalidad, SA.TipoDeFuncion,
SA.RegimenSalarial, SA.RegimenDesignacion, CONVERT(VARCHAR(20), AF.NumeroAfiliado), AF.Organismo, 
SA.NormaAlta, GetDate(), SA.CategoriaTitulo, SA.IdServicioAgente, SO.Nivel, 
CASE 
WHEN O.Cuise > 1000 AND O.Cuise < 1100 THEN 2
ELSE 1
END, SO.Modalidad, SO.Zona
FROM tb_ServiciosAgentes SA
INNER JOIN TraslacionDeCodigosJuntasYPDDef T ON T.idCargo = Sa.CargoSalarial AND T.IdAsignatura = SA.Asignatura
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = SA.UbicacionOrig
INNER JOIN tb_Suborganizaciones SO ON SO.Org = O.IdOrganizaciones
INNER JOIN tb_Cargos C ON C.IdCargo = SA.CargoSalarial
LEFT OUTER JOIN tb_relAfiliacionServicios RAS ON RAS.IdServicio = SA.IdServicioAgente
LEFT OUTER JOIN tb_Afiliaciones AF ON AF.IdAfiliacion = RAS.IdAfiliacion
WHERE TipoDeServicio = 1 and SO.EsPropia = 'S' AND C.RegimenSalarial = 12 -- De Base y Cargo
AND
SA.FechaAlta<=@FechaHasta and (SA.Baja='N' OR (SA.Baja='S' AND DATEADD(day, 1, SA.FechaBaja)>=@FechaDesde))

UNION

SELECT MIN(SA.Agente), MIN(SA.NroDeOrden9), MIN(T.CargoDef), MIN(T.AsigDef), SUM(Sa.Horas),
MIN(SA.UbicacionOrig), MIN(O.Nombre), MIN(O.Localidad), MIN(SA.SituacionRevista), 
CASE 
WHEN MIN(SA.FechaAlta) < @FechaDesde THEN @FechaDesde
ELSE MIN(Sa.FechaAlta)
END, MIN(SA.Baja),
CASE
WHEN MIN(DATEADD(day, 1, SA.FechaBaja)) > @FechaHasta THEN @FechaHasta
WHEN MIN(DATEADD(day, 1, SA.FechaBaja)) IS NULL THEN @FechaHasta
ELSE MIN(DATEADD(day, 1, SA.FechaBaja))
END, MIN(SA.FechaTermino), MIN(SA.NormaBaja), MIN(SA.CausaBaja), MIN(SA.CausaAlta), MIN(Sa.TipoDeServicio),
MIN(SA.Sistema), MIN(SA.RegimenLaboral), MIN(SA.Financiamiento), MIN(SA.Presupuesto), MIN(SA.Finalidad), MIN(SA.TipoDeFuncion),
MIN(SA.RegimenSalarial), MIN(SA.RegimenDesignacion), MIN(CONVERT(VARCHAR(20), AF.NumeroAfiliado)), MIN(AF.Organismo), 
MIN(SA.NormaAlta), MIN(GetDate()), MIN(SA.CategoriaTitulo), MIN(SA.IdServicioAgente), MIN(SO.Nivel), 
CASE 
WHEN MIN(O.Cuise) > 1000 AND MIN(O.Cuise) < 1100 THEN 2
ELSE 1
END, MIN(SO.Modalidad), MIN(SO.Zona)
FROM tb_ServiciosAgentes SA
INNER JOIN TraslacionDeCodigosJuntasYPDDef T ON T.idCargo = Sa.CargoSalarial AND T.IdAsignatura = SA.Asignatura
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = SA.UbicacionOrig
INNER JOIN tb_Suborganizaciones SO ON SO.Org = O.IdOrganizaciones
INNER JOIN tb_Cargos C ON C.IdCargo = SA.CargoSalarial
LEFT OUTER JOIN tb_relAfiliacionServicios RAS ON RAS.IdServicio = SA.IdServicioAgente
LEFT OUTER JOIN tb_Afiliaciones AF ON AF.IdAfiliacion = RAS.IdAfiliacion
WHERE TipoDeServicio = 1 and SO.EsPropia = 'S' AND C.RegimenSalarial = 13 -- De Base y horas
AND
SA.FechaAlta<=@FechaHasta and (SA.Baja='N' OR (SA.Baja='S' AND DATEADD(day, 1, SA.FechaBaja)>=@FechaDesde))
GROUP BY O.IdOrganizaciones, SA.FechaAlta, SA.Baja, SA.FechaBaja, SO.Nivel, SO.Modalidad, SO.Zona, SA.CargoSalarial, SA.Asignatura

IF @@error <> 0 BEGIN
	SET @error = @@error
	GOTO Salir
END


-- PASA LAS LICENCIAS HISTORICAS
-- RENDIMIENTO: 126239 Registros en 21 SEGUNDOS
INSERT INTO tb_LicenciasHistoricas(IdServicio, Licencia, ConOSinGoce, FechaAlta, Baja, FechaBaja)
SELECT SSA.ServicioAgente, SSA.Licencia, 
CASE SituacionLaboral
WHEN 3 THEN 'S'
WHEN 4 THEN 'N'
WHEN 8 THEN 'S'
ELSE Null
END,
CASE 
WHEN SSA.FechaAlta < @FechaDesde THEN @FechaDesde
ELSE SSA.FechaAlta
END, SSA.Baja, 
CASE
WHEN DATEADD(day, 1, SSA.FechaBaja) > @FechaHasta THEN @FechaHasta
WHEN DATEADD(day, 1, SSA.FechaBaja) IS NULL THEN @FechaHasta
ELSE DATEADD(day, 1, SSA.FechaBaja)
END
FROM tb_ServiciosAgentes SA INNER JOIN tb_SubServiciosAgentes SSA ON SSA.ServicioAgente = SA.IdServicioAgente
INNER JOIN tb_Licencias L ON L.IdLicencia = SSA.Licencia
WHERE SSA.Licencia IS NOT NULL AND L.CuentaAntGral = 'S' AND 
SA.FechaAlta<=@FechaHasta and (SA.Baja='N' OR (SA.Baja='S' AND DATEADD(day, 1, SA.FechaBaja)>=@FechaDesde))

IF @@error <> 0 BEGIN
	SET @error = @@error
	GOTO Salir
END


-- PASA LAS COMISIONES DE SERVICIO
-- RENDIMIENTO: 1018 en 2 SEGUNDOS
-- SE BORRARON LOS REGISTROS PASADOS PORQUE SE MODIFICO LA ESPECIICACION
INSERT INTO tb_ComisionesValorables (Agente, FechaInicio, FechaFin, Organizacion, Descripcion, GrupoIncumbencias)
SELECT SA.Agente, 
CASE
WHEN SSA.FechaAlta < @FechaDesde THEN @FechaDesde
ELSE SSA.FechaAlta
END, 
CASE
WHEN DATEADD(day, 1, SSA.FechaBaja) > @FechaHasta THEN @FechaHasta
WHEN DATEADD(day, 1, SSA.FechaBaja) IS NULL THEN @FechaHasta
ELSE DATEADD(day, 1, SSA.FechaBaja)
END,
SA.UbicacionOrig, Null, Null
FROM tb_SubServiciosAgentes SSA INNER JOIN tb_ServiciosAgentes SA ON SA.IdServicioAgente = SSA.ServicioAgente
WHERE SSA.SituacionLaboral =1 AND SSA.SituacionExtraordinaria = 3 AND SSA.Licencia IS NOT NULL
AND
SA.FechaAlta<=@FechaHasta and (SA.Baja='N' OR (SA.Baja='S' AND DATEADD(day, 1, SA.FechaBaja)>=@FechaDesde))

IF @@error <> 0 BEGIN
	SET @error = @@error
	GOTO Salir
END

Salir:
IF @error <> 0 BEGIN
	ROLLBACK TRANSACTION
END
ELSE BEGIN
	COMMIT TRANSACTION
END










GO
